package com.molichuxing.services.infrastructure.service;


import java.util.List;
import java.util.Map;

import com.molichuxing.framework.dto.Paged;
import com.molichuxing.services.infrastructure.dto.request.create.AccidentCreateDto;
import com.molichuxing.services.infrastructure.dto.request.modify.AccidentModifyDto;
import com.molichuxing.services.infrastructure.dto.response.AccidentDownloadDto;
import com.molichuxing.services.infrastructure.dto.response.AccidentDto;

/**
 * <p>
 * 车辆表 服务类
 * </p>
 *
 * @author 
 * @since 2019-08-15
 */
public interface AccidentService {

  /**
   * 根据查询条件获取车辆事故列表信息
   *    * licencePlate 车牌号
   *    * vin 车架号
   *    * userId 用户id
   *    * liabilityType 责任类型（0：无责，1：全责，2：主责，3：同责，4：次责）
   *    * isCasualty 是否有人伤（0：无人伤，1：有人伤）
   *    * accidentType 事故类型（1:单方事故，2：双方事故，3：多方事故，4：停放受损，5：车辆盗抢，6：车辆自燃，7：车辆涉水，8：重大自然灾害）
   *    * accidentStartTime     出险开始时间
   *    * accidentEndTime     出险结束时间
   *    * status 事故状态（1：事故未确认，2：事故已确认，3：结案未确认，4：已结案，5：无效报备）
   * @param map
   * @param pageSize
   * @param pageNum
   * @return
   */
  Paged<AccidentDto> getCarAccidentPage(Map<String, Object> map, Integer pageNum, Integer pageSize);

  /**
   * 根据车辆id获取事故
   * @param carId
   * @return
   */
  List<AccidentDto> getAccidentByCarId(Integer carId);

  /**
   * 根据事故id获取事故
   * @param accidentId
   * @return
   */
  AccidentDto getCarAccident(Integer accidentId);

  /**
   * 修改事故信息
   * @param modifyDto
   * @return
   */
  Boolean modifyAccident(AccidentModifyDto modifyDto);

  /**
   * APP事故列表
   * @param orderCodes
   * @param userId
   * @return
   */
  Paged<AccidentDto> getCarAccidentAppPage(List<Long> orderCodes, Integer userId, Integer pageNum, Integer pageSize);

  /**
   * 创建事故信息表 返回id
   * @param accidentCreateDto
   * @return
   */
  Integer createAccident(AccidentCreateDto accidentCreateDto);

  /**
   * 修改事故信息表
   * @param accidentCreateDto
   * @return
   */
  int updateAccidentById(AccidentCreateDto accidentCreateDto);

  /**
   * 修改事故主状态
   * @param accidentId
   * @param status
   * @return
   */
  int updateAccidentStatusById(Integer accidentId,Integer status);

  /**
   *  事故待确认数量& 结案待确认数量
   * @return
   */
  Integer getAccidentCount(Integer status);


  /**
   * 获取tab页的数量
   * @param map
   * @return
   */
  int getCarAccidentTabCount(Map<String, Object> map);
  
  /**
   * 查询事故报备导出数据
   * @param map
   * @return
   */
  List<AccidentDownloadDto> getAccidentDownload(Map<String, Object> map);

	/**
	 * 查询事故报备导出数据条数
	 * 
	 * @param selectParams
	 * @return
	 */
	public Long getAccidentDownloadCount(Map<String, Object> selectParams);
}
